Fisher线性判别分析以及python实现 | 您所在的位置:网站首页 › python pyplot 线型 › Fisher线性判别分析以及python实现 |
Fisher线性判别分析以及python实现
阿库塔姆
分类:机器学习
发布时间 2022.06.11阅读数 1209 评论数 0
线性判别函数基本概念
而如何定量分析找到这一最佳投影方向则是我们下面需要进行的任务 最优方向推导过程#导入所需库:import numpy as npfrom matplotlib import pyplot as plt #创建样本集:X1 = np.array([[[1.2],[2.8]], [[1.9],[3.7]], [[2.5],[3.8]], [[4.8],[7.9]], [[5.6],[7.8]]])X2 = np.array([[[9.7],[12.6]], [[10.8],[12.7]], [[13.7],[22.7]], [[7.48],[14.82]], [[11.23],[17.16]]])N1 = X1.shape[0]N2 = X2.shape[0] #类均值向量:m1 = np.array([[0],[0]])for i in range(0,N1): m1 =m1+X1[i]m1 = m1/N1m2 = np.array([[0],[0]])for i in range(0,N2): m2 =m2+X2[i]m2 = m2/N2 #类内离散度矩阵:S1 = np.zeros((2,2))for i in range(0,N1): S1 = S1+np.dot(X1[i]-m1,np.transpose(X1[i]-m1))S2 = np.zeros((2,2))for i in range(0,N2): S2 = S2+np.dot(X2[i]-m2,np.transpose(X2[i]-m2))Sw = S1+S2 #类间离散度矩阵:Sb = np.dot(m1-m2,np.transpose(m1-m2)) #方向向量:w = np.dot(np.linalg.inv(Sw),m1-m2)print(w) #投影后均值:m11 = np.dot(np.transpose(w),m1)m21 = np.dot(np.transpose(w),m2)w0 = -(m11+m21)/2 #测试样本:x_test = np.array([[3.42],[5.86]])g = np.dot(np.transpose(w),x_test)+w0if g>0: print('测试样本属于第一类!')else: print('测试样本属于第二类!') #可视化:for i in range(0,N1): plt.scatter(X1[i,0],X1[i,1],c='r')for i in range(0,N2): plt.scatter(X2[i,0],X2[i,1],c='b')plt.scatter(x_test[0],x_test[1],c='g')x = np.arange(0,15,0.01)y = w[1]*x/w[0]plt.plot(x,y,c='black')plt.show() 运行结果如图: 最终将测试样本分入第一类,从图像上来看是合理的 人工智能机器学习Python模式识别线性代数
打赏 0 点赞 0 收藏 0 分享 微信 微博 QQ 图片 上一篇:主成分分析法(PCA)详解与python实现 |
CopyRight 2018-2019 实验室设备网 版权所有 |